#include<bits/stdc++.h>
#define ll long long 
using namespace std;
const int N = 4005,M = 5e4+5,B = 64,mod = 999999999;
int n,q,a[N][N],in[M][5];
inline int Add(int x,int y)
{
	if(x+y>=2*mod) return y-2*mod;
	if(x+y>=mod) return y-mod;
	return y;
}
int b[N],lt[N],rt[N];
ll s1[N/B+5][N/B+5],s2[N][N/B+5],s3[N][N/B+5];
inline void add(int x,int y,int v)
{
	a[x][y]+=v;
	s1[b[x]][b[y]]+=v;
	s2[x][b[y]]+=v;
	s3[y][b[x]]+=v;
}
inline ll ask(int x,int y)
{
	ll res = 0;
	for(int i = 1;i<b[x];i++)
		for(int j = 1;j<b[y];j++)
			res+=s1[i][j];
	for(int i = lt[b[x]];i<=x;i++)
		for(int j = 1;j<b[y];j++)
			res+=s2[i][j];
	for(int i = lt[b[y]];i<=y;i++)
		for(int j = 1;j<b[x];j++)
			res+=s3[i][j];
	for(int i = lt[b[x]];i<=x;i++)
		for(int j = lt[b[y]];j<=y;j++)
			res+=a[i][j];
	return res;
}
signed main()
{
	freopen("fire.in","r",stdin);
	freopen("fire.out","w",stdout);
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	cin>>n>>q;
	for(int i = 1;i<=n;i++)
		b[i] = (i-1)/B+1;
	for(int i = 1;i<=b[n];i++)
		lt[i] = rt[i-1]+1,rt[i] = lt[i]+B-1;
	rt[b[n]] = n;
	int cnt[2] = {0,0};
	for(int i = 1;i<=q;i++)
	{
		cin>>in[i][0];
		if(in[i][0]==1)
		{
			cin>>in[i][1]>>in[i][2]>>in[i][3]>>in[i][4];
			cnt[in[i][1]]++;
		}
		else cin>>in[i][1]>>in[i][2];
	}
	if(cnt[0]<cnt[1])
	{
		for(int i = 1;i<=q;i++)
		{
			if(in[i][0]==1) in[i][1]^=1;
			else swap(in[i][1],in[i][2]);
		}
	}
	for(int i = 1;i<=q;i++)
	{
		int op,x,y;
		op = in[i][0];
		if(op==1)
		{
			op = in[i][1];
			if(op==0)
			{
				x = in[i][2],op = in[i][3],y = in[i][4];
				if(op==1) for(int i = 1;i<=n;i++) add(x,i,(a[x][i]&y)-a[x][i]);
				else if(op==2) for(int i = 1;i<=n;i++) add(x,i,(a[x][i]|y)-a[x][i]);
				else if(op==3) for(int i = 1;i<=n;i++) add(x,i,(a[x][i]^y)-a[x][i]);
				else
				{
					for(int i = 1;i<=n;i++)
					{
						add(x,i,y);
						if(a[x][i]>=mod) add(x,i,-mod); 
						if(a[x][i]>=mod) add(x,i,-mod); 
					}
				}
			}
			else
			{
				x = in[i][2],op = in[i][3],y = in[i][4];
				if(op==1) for(int i = 1;i<=n;i++) add(i,x,(a[i][x]&y)-a[i][x]);
				else if(op==2) for(int i = 1;i<=n;i++) add(i,x,(a[i][x]|y)-a[i][x]);
				else if(op==3) for(int i = 1;i<=n;i++) add(i,x,(a[i][x]^y)-a[i][x]);
				else
				{
					for(int i = 1;i<=n;i++)
					{
						add(i,x,y);
						if(a[i][x]>=mod) add(i,x,-mod); 
						if(a[i][x]>=mod) add(i,x,-mod); 
					}
				}
			}
		}
		else
		{
			x = in[i][1],y = in[i][2];
			cout<<ask(x,y)<<'\n';
		}
	}
	return 0;
}

